從今天開始,我們要將前面 21 天所學到的所有 Java 核心觀念(類別、繼承、多型、ArrayList、二維陣列、例外處理與檔案讀寫)全部串聯起來,製作一個簡單的小遊戲。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
說明:
java.awt.*:提供基本的視窗元件佈局(如 BorderLayout)與顏色、字型控制。
java.awt.event.*:用來處理滑鼠點擊、鍵盤互動等事件監聽。
javax.swing.*:提供現代化的圖形介面元件(如 JFrame、JPanel、JButton、JLabel)。
public class TicTacToe {
int boardWidth = 600;
int boardHeight = 650; // 預留 50 像素給上方的文字面板(顯示輪到誰或遊戲結果)
JFrame frame = new JFrame();
// 建構子:初始化視窗屬性
TicTacToe() {
// 1. 設置視窗是否可見
frame.setVisible(true);
// 2. 設置視窗的寬度與高度
frame.setSize(boardWidth, boardHeight);
// 3. 讓視窗開啟時自動置中於螢幕中央
frame.setLocationRelativeTo(null);
// 4. 固定視窗大小,不允許使用者隨意拉伸調整
frame.setResizable(false);
// 5. 設定當使用者點擊視窗的「X」關閉按鈕時,直接終止程式執行
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 6. 設定視窗的佈局管理器為邊界佈局(BorderLayout)
frame.setLayout(new BorderLayout());
}
}
說明:
* 視窗尺寸規劃:將高度設為 650 像素,其中 600 像素留給下方的 3x3 棋盤,另外 50 像素則預留給頂部用來顯示「目前輪到誰」的文字面板。
* setResizable(false):將視窗鎖定大小,避免玩家手動放大縮小視窗導致排版跑版。 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE):確保點擊右上角關閉時,背景的 Java 執行緒能徹底釋放並關閉程式。
* BorderLayout:採用邊界佈局,方便我們後續把頂部的文字區塊(North)與底部的九宮格遊戲面板(Center)完美拼湊在一起。
跑出來長這樣子:
參考教學影片:https://youtu.be/Nc77ymnm8Ss?si=Z12SF2rbfU1xC14d